import logging

import pytest
import allure
import configs.configs
import os
logger = logging.getLogger(__name__)

#用例执行前fixture2
@pytest.fixture(autouse=True,scope="session")
def fixture_5():
    print("开始执行")
    yield



#用例执行前fixture1
@pytest.fixture(scope="session")#scope 夹具生效范围
def token():
    token = "123"
    yield token

# 钩子，用例开始前，用例执行中，用例执行后 各执行一次
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item,call):
    #item：当前正在执行的测试用例（TestItem），里面包含函数名、路径、fixture 信息、用户自定义 markers 等。
#    """report.when —— 字符串，取值为 "setup" / "call" / "teardown"，分别代表用例前置、用例本体、用例清理三个阶段。
# report.outcome —— "passed" / "failed" / "skipped"。
# report.longrepr —— 详细错误 traceback（当 outcome != "passed" 时才有）"""
    outcome = yield
    report = outcome.get_result()
    if report.when == "setup":
        print("开始执行钩子函数")

    elif report.when == "call":
        if report.outcome != "passed": #call为用例的结果
            logger.error("失败了老弟")
            allure.attach(body=str(report.longrepr), name="错误信息1", attachment_type=allure.attachment_type.TEXT)
        else:
            print(f"Test {item.name} result: {report.outcome} {report.when}")
    elif report.when == "teardown":#tear为测试结束后有无异常

            logger.info("teardown122")

    # outcome.force_result(...)	#q强制修改钩子的返回值12